In [1]:
import PIL as pillow
%matplotlib inline
import numpy as np
import matplotlib.image as mpimg
from scipy import ndimage
from PIL import Image
from PIL import ImageFilter
from matplotlib import pyplot as plt
from matplotlib.pyplot import *
import matplotlib.image as mpimg
import os
import cv2
import time
import scipy.fftpack as fp
In [2]:
def fft(imagepath):
    ## Functions to go from image to frequency-image and back
    im2freq = lambda data:fp.rfft(fp.rfft(data, axis=0),axis=1)
    freq2im = lambda f:fp.irfft(fp.irfft(f, axis=1),axis=0)


    ## Read in data file and transform
    data = np.array(Image.open(imagepath))
    freq = im2freq(data)
    back = freq2im(freq)
    # Make sure the forward and backward transforms work!
    assert(np.allclose(data, back))
    ## Helper functions to rescale a frequency-image to [0, 255] and save
    remmax = lambda x: x/x.max()
    remmin = lambda x: x - np.amin(x, axis=(0,1), keepdims=True)
    touint8 = lambda x: (remmax(remmin(x))*(256-1e-4)).astype(int)
    return(touint8(freq))
In [3]:
def laplacian(path):

    me_non_blur_demosaic = cv2.imread(path)
    blur = cv2.GaussianBlur(me_non_blur_demosaic,(3,3),0,0, cv2.BORDER_DEFAULT)
    laplacian = cv2.Laplacian(blur, ddepth = cv2.CV_16UC3 , ksize = 3, scale = 1,delta = 0, borderType=cv2.BORDER_DEFAULT)
    (mean, stddev) = cv2.meanStdDev(laplacian)
    laplacian_operator_std_dev = stddev[0]
    variance = laplacian_operator_std_dev**2
    return(variance)
In [4]:
# Create image objects
img_blurry_me_DEMOSAIC = ("Sample_Me_Blur/deomosaicimage.bmp")
img_not_blurry_me_DEMOSAIC =("Sample_Me-Non-Blur/deomosaicimage.bmp")
img_blurry_DEMOSAIC = ("SampleBlur/deomosaicimage.bmp")
img_not_blurry_DEMOSAIC =("SampleNon-Blur/deomosaicimage.bmp")
img_blurry_RAW = ("SampleBlur/curFrame.bmp")
img_not_blurry_RAW = ("SampleNon-Blur/curFrame.bmp")
img_blurry_me_RAW = ("Sample_Me_Blur/curFrame.bmp")
img_not_blurry_me_RAW = ("Sample_Me-Non-Blur/curFrame.bmp")
In [5]:
os.remove('saint1.tiff')
os.remove('saint2.tiff')
os.remove('saint3.tiff')
os.remove('saint4.tiff')
os.remove('saint5.tiff')
os.remove('saint6.tiff')
os.remove('saint7.tiff')
os.remove('saint8.tiff')
imsave('saint1.tiff',fft(img_blurry_DEMOSAIC))
imsave('saint2.tiff',fft(img_not_blurry_DEMOSAIC))
imsave('saint3.tiff',fft(img_blurry_RAW))
imsave('saint4.tiff',fft(img_not_blurry_RAW))
imsave('saint5.tiff',fft(img_blurry_me_DEMOSAIC))
imsave('saint6.tiff',fft(img_not_blurry_me_DEMOSAIC))
imsave('saint7.tiff',fft(img_blurry_me_RAW))
imsave('saint8.tiff',fft(img_not_blurry_me_RAW))
In [6]:
# Create image objects
blurry_me_DEMOSAIC = mpimg.imread("Sample_Me_Blur/deomosaicimage.bmp")
not_blurry_me_DEMOSAIC = mpimg.imread("Sample_Me-Non-Blur/deomosaicimage.bmp")
blurry_DEMOSAIC = mpimg.imread("SampleBlur/deomosaicimage.bmp")
not_blurry_DEMOSAIC = mpimg.imread("SampleNon-Blur/deomosaicimage.bmp")
blurry_RAW = mpimg.imread("SampleBlur/curFrame.bmp")
not_blurry_RAW = mpimg.imread("SampleNon-Blur/curFrame.bmp")
blurry_me_RAW = mpimg.imread("Sample_Me_Blur/curFrame.bmp")
not_blurry_me_RAW = mpimg.imread("Sample_Me-Non-Blur/curFrame.bmp")

Input¶

In [7]:
# Display the originals
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(blurry_RAW)
axarr[1].imshow(not_blurry_RAW)
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(imread('saint3.tiff'))
axarr[1].imshow(imread('saint4.tiff'))
print("   ################################################# RAW_Sharp_Image ########################################")
print("     "+str(laplacian(img_blurry_RAW)) + "                                                  " + str(laplacian(img_not_blurry_RAW)))
print("     "+str(float(laplacian('saint3.tiff'))) + "                                                  " + str(float(laplacian('saint4.tiff'))))
   ################################################# RAW_Sharp_Image ########################################
     [ 1554.61858963]                                                  [ 1535.92945807]
     0.0226199292323                                                  0.0303075256363
In [8]:
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(blurry_me_RAW)
axarr[1].imshow(not_blurry_me_RAW)
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(imread('saint7.tiff'))
axarr[1].imshow(imread('saint8.tiff'))
print("   ################################################# RAW_Sharp_Image ########################################")
print("     "+str(laplacian(img_blurry_me_RAW)) + "                                                  " + str(laplacian(img_not_blurry_me_RAW)))
print("     "+str(float(laplacian('saint7.tiff'))) + "                                                  " + str(float(laplacian('saint8.tiff'))))
   ################################################# RAW_Sharp_Image ########################################
     [ 785.84054787]                                                  [ 952.52165588]
     0.0403411050054                                                  0.0404007469095
In [9]:
f, axarr = plt.subplots(1,2, figsize=(25,20))
axarr[0].imshow(blurry_DEMOSAIC)
axarr[1].imshow(not_blurry_DEMOSAIC)
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(imread('saint1.tiff'))
axarr[1].imshow(imread('saint2.tiff'))
print("   ################################################# DEMOSAIC_test_Image ########################################")
print("     "+str(laplacian(img_blurry_DEMOSAIC)) + "                                                  " + str(laplacian(img_not_blurry_DEMOSAIC)))
print("     "+str(float(laplacian('saint1.tiff'))) + "                                                  " + str(float(laplacian('saint2.tiff'))))
   ################################################# DEMOSAIC_test_Image ########################################
     [ 114.39990774]                                                  [ 104.85823758]
     0.0218227207999                                                  0.026033458978
In [10]:
f, axarr = plt.subplots(1,2, figsize=(25,20))
axarr[0].imshow(blurry_me_DEMOSAIC)
axarr[1].imshow(not_blurry_me_DEMOSAIC)
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(imread('saint5.tiff'))
axarr[1].imshow(imread('saint6.tiff'))
print("   ################################################# DEMOSAIC_Sharp_Image ########################################")
print("     "+str(laplacian(img_blurry_me_DEMOSAIC)) + "                                                  " + str(laplacian(img_not_blurry_me_DEMOSAIC)))
print("     "+str(float(laplacian('saint5.tiff'))) + "                                                  " + str(float(laplacian('saint6.tiff'))))
   ################################################# DEMOSAIC_Sharp_Image ########################################
     [ 85.40866811]                                                  [ 233.47910403]
     0.0389796929417                                                  0.0365731705202

Applying Sobel Filter¶

In [11]:
# Let's find edges

def apply_sobel_filter(input_image):
    im = np.asarray(input_image)
    im = input_image
    sx = ndimage.sobel(im, axis=0, mode='constant')
    sy = ndimage.sobel(im, axis=1, mode='constant')
    mag = np.hypot(sx, sy)  # magnitude
    mag *= 255.0 / np.max(mag)  # normalize (Q&D)
    sob = np.hypot(sx, sy, dtype=np.float32)
    return sob
In [12]:
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(apply_sobel_filter(blurry_RAW))
axarr[1].imshow(apply_sobel_filter(not_blurry_RAW))
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(apply_sobel_filter(blurry_me_RAW))
axarr[1].imshow(apply_sobel_filter(not_blurry_me_RAW))
f, axarr = plt.subplots(1,2, figsize=(25,20))
axarr[0].imshow(apply_sobel_filter(blurry_DEMOSAIC))
axarr[1].imshow(apply_sobel_filter(not_blurry_DEMOSAIC))
f, axarr = plt.subplots(1,2, figsize=(25,20))
axarr[0].imshow(apply_sobel_filter(blurry_me_DEMOSAIC))
axarr[1].imshow(apply_sobel_filter(not_blurry_me_DEMOSAIC))
Out[12]:
<matplotlib.image.AxesImage at 0x10e0bbdd0>
In [13]:
    #font                   = cv2.FONT_HERSHEY_SIMPLEX
    #bottomLeftCornerOfText = (10,100)
    #fontScale              = 2
    #fontColor              = (255,0,0)
    #lineType               = 2
    #cv2.putText(me_non_blur_demosaic,str(float(laplacian_operator_std_dev)), bottomLeftCornerOfText, font, fontScale,fontColor,lineType)

    #Display the image
    #f, axarr = plt.subplots(1,2, figsize=(25,20))
    #axarr[0].imshow(mpimg.imread(me_non_blur_demosaic))
In [14]:
#cv2.imshow(apply_sobel_filter(img_blurry_DEMOSAIC))
In [15]:
# Let's find edges



def pply_sobel_filter(input_image):
    im = np.asarray(input_image)
    im = input_image
    sx = ndimage.sobel(im, axis=1, mode='constant')
    sy = ndimage.sobel(im, axis=0, mode='constant')
    mag = np.hypot(sx, sy)  # magnitude
    mag *= 255.0 / np.max(mag)  # normalize (Q&D)
    sob = np.hypot(sx, sy, dtype=np.float32)
    return sob


def aapply_sobel_filter(input_image):

    import numpy as np
    from scipy.signal import convolve2d
    from scipy.ndimage import imread

    img = np.asarray(input_image)
    img = input_image
    # Prepare the kernels
    a1 = np.matrix([1, 2, 1])
    a2 = np.matrix([-1, 0, 1])
    Kx = a1.T * a2
    Ky = a2.T * a1

    # Apply the Sobel operator
    Gx = convolve2d(img, Kx, "same", "symm")
    Gy = convolve2d(img, Ky, "same", "symm")
    G = np.sqrt(Gx**2 + Gy**2)
    # or using the absolute values
    #G = np.abs(Gx) + np.abs(Gy)
    return(G)

f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(pply_sobel_filter(blurry_RAW))
axarr[1].imshow(pply_sobel_filter(not_blurry_RAW))
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(aapply_sobel_filter(blurry_RAW))
axarr[1].imshow(aapply_sobel_filter(not_blurry_RAW))
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(pply_sobel_filter(blurry_me_RAW))
axarr[1].imshow(pply_sobel_filter(not_blurry_me_RAW))
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(aapply_sobel_filter(blurry_me_RAW))
axarr[1].imshow(aapply_sobel_filter(not_blurry_me_RAW))
f, axarr = plt.subplots(1,2, figsize=(25,20))
axarr[0].imshow(pply_sobel_filter(blurry_DEMOSAIC))
axarr[1].imshow(pply_sobel_filter(not_blurry_DEMOSAIC))
f, axarr = plt.subplots(1,2, figsize=(25,20))
axarr[0].imshow(aapply_sobel_filter(blurry_DEMOSAIC))
axarr[1].imshow(aapply_sobel_filter(not_blurry_DEMOSAIC))
f, axarr = plt.subplots(1,2, figsize=(25,20))
axarr[0].imshow(pply_sobel_filter(blurry_me_DEMOSAIC))
axarr[1].imshow(pply_sobel_filter(not_blurry_me_DEMOSAIC))
f, axarr = plt.subplots(1,2, figsize=(25,20))
axarr[0].imshow(aapply_sobel_filter(blurry_me_DEMOSAIC))
axarr[1].imshow(aapply_sobel_filter(not_blurry_me_DEMOSAIC))
#blurry_ = apply_sobel_filter(blurry_RAW)
Out[15]:
<matplotlib.image.AxesImage at 0x10c667950>
In [16]:
hist1 = cv2.calcHist([apply_sobel_filter(blurry_RAW)],[0],None,[256],[0,256])
hist2 = cv2.calcHist([apply_sobel_filter(not_blurry_RAW)],[0],None,[256],[0,256])
hist3 = cv2.calcHist([apply_sobel_filter(blurry_DEMOSAIC)],[0],None,[256],[0,256])
hist4 = cv2.calcHist([apply_sobel_filter(not_blurry_DEMOSAIC)],[0],None,[256],[0,256])
hist5 = cv2.calcHist([apply_sobel_filter(blurry_me_RAW)],[0],None,[256],[0,256])
hist6 = cv2.calcHist([apply_sobel_filter(not_blurry_me_RAW)],[0],None,[256],[0,256])
hist7 = cv2.calcHist([apply_sobel_filter(blurry_me_DEMOSAIC)],[0],None,[256],[0,256])
hist8 = cv2.calcHist([apply_sobel_filter(not_blurry_me_DEMOSAIC)],[0],None,[256],[0,256])